// 字符串处理工具

use std::ffi::{CString};
use std::str;
use super::super::core::error::FFIError;
use super::super::core::error::FFIResult;
use super::unsafe_helpers;

// 字符串工具结构体
pub struct StringUtils;

impl StringUtils {
    // 从C字符串创建Rust字符串
    pub fn from_c_string(c_str_ptr: *const i8) -> FFIResult<String> {
        // 检查指针是否为空
        if c_str_ptr.is_null() {
            return Err(FFIError::NullPointer);
        }
        
        // 使用unsafe_helpers中的安全包装函数
        unsafe {
            unsafe_helpers::unsafe_cstr_to_string(c_str_ptr)
                .map_err(|_| FFIError::InvalidParameter)
        }
    }
    
    // 将Rust字符串转换为C字符串
    pub fn to_c_string(rust_str: &str) -> FFIResult<CString> {
        // 尝试创建C字符串
        CString::new(rust_str).map_err(|_| FFIError::InvalidParameter)
    }
    
    // 安全地复制C字符串
    pub fn copy_c_string(source: *const i8, destination: *mut i8, max_length: u32) -> FFIResult<u32> {
        // 检查指针是否为空
        if source.is_null() || destination.is_null() {
            return Err(FFIError::NullPointer);
        }
        
        // 检查最大长度是否为0
        if max_length == 0 {
            return Err(FFIError::BufferTooSmall);
        }
        
        // 使用unsafe_helpers中的安全包装函数
        unsafe {
            Ok(unsafe_helpers::unsafe_copy_c_string(source, destination, max_length))
        }
    }
    
    // 获取C字符串的长度
    pub fn c_string_length(c_str_ptr: *const i8) -> FFIResult<u32> {
        // 检查指针是否为空
        if c_str_ptr.is_null() {
            return Err(FFIError::NullPointer);
        }
        
        // 使用unsafe_helpers中的安全包装函数
        unsafe {
            Ok(unsafe_helpers::unsafe_c_string_length(c_str_ptr))
        }
    }
    
    // 比较两个C字符串
    pub fn compare_c_strings(str1: *const i8, str2: *const i8) -> FFIResult<bool> {
        // 检查指针是否为空
        if str1.is_null() || str2.is_null() {
            return Err(FFIError::NullPointer);
        }
        
        // 使用unsafe_helpers中的安全包装函数
        unsafe {
            Ok(unsafe_helpers::unsafe_compare_c_strings(str1, str2))
        }
    }
}